// Generated from TempIdentify.g4 by ANTLR 4.13.2

    package cool.taomu.toolkit.antlr4.template.engie.templateidentify; 

import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.misc.*;
import org.antlr.v4.runtime.tree.*;
import java.util.List;
import java.util.Iterator;
import java.util.ArrayList;

@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"})
public class TempIdentifyParser extends Parser {
	static { RuntimeMetaData.checkVersion("4.13.2", RuntimeMetaData.VERSION); }

	protected static final DFA[] _decisionToDFA;
	protected static final PredictionContextCache _sharedContextCache =
		new PredictionContextCache();
	public static final int
		T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9, 
		T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17, 
		T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, 
		T__24=25, T__25=26, T__26=27, CHINESE=28, ID=29, WS=30;
	public static final int
		RULE_start = 0, RULE_expr = 1, RULE_define = 2, RULE_content = 3;
	private static String[] makeRuleNames() {
		return new String[] {
			"start", "expr", "define", "content"
		};
	}
	public static final String[] ruleNames = makeRuleNames();

	private static String[] makeLiteralNames() {
		return new String[] {
			null, "'#!'", "' '", "':'", "'~'", "'|'", "'`'", "'&'", "'%'", "'@'", 
			"'!'", "'^'", "'\"'", "'''", "'('", "')'", "';'", "'?'", "'{'", "'<'", 
			"'>'", "'}'", "'#'", "'\\'", "'/'", "'='", "'$'", "'.'"
		};
	}
	private static final String[] _LITERAL_NAMES = makeLiteralNames();
	private static String[] makeSymbolicNames() {
		return new String[] {
			null, null, null, null, null, null, null, null, null, null, null, null, 
			null, null, null, null, null, null, null, null, null, null, null, null, 
			null, null, null, null, "CHINESE", "ID", "WS"
		};
	}
	private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
	public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);

	/**
	 * @deprecated Use {@link #VOCABULARY} instead.
	 */
	@Deprecated
	public static final String[] tokenNames;
	static {
		tokenNames = new String[_SYMBOLIC_NAMES.length];
		for (int i = 0; i < tokenNames.length; i++) {
			tokenNames[i] = VOCABULARY.getLiteralName(i);
			if (tokenNames[i] == null) {
				tokenNames[i] = VOCABULARY.getSymbolicName(i);
			}

			if (tokenNames[i] == null) {
				tokenNames[i] = "<INVALID>";
			}
		}
	}

	@Override
	@Deprecated
	public String[] getTokenNames() {
		return tokenNames;
	}

	@Override

	public Vocabulary getVocabulary() {
		return VOCABULARY;
	}

	@Override
	public String getGrammarFileName() { return "TempIdentify.g4"; }

	@Override
	public String[] getRuleNames() { return ruleNames; }

	@Override
	public String getSerializedATN() { return _serializedATN; }

	@Override
	public ATN getATN() { return _ATN; }

	public TempIdentifyParser(TokenStream input) {
		super(input);
		_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
	}

	@SuppressWarnings("CheckReturnValue")
	public static class StartContext extends ParserRuleContext {
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode EOF() { return getToken(TempIdentifyParser.EOF, 0); }
		public StartContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_start; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof TempIdentifyListener ) ((TempIdentifyListener)listener).enterStart(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof TempIdentifyListener ) ((TempIdentifyListener)listener).exitStart(this);
		}
	}

	public final StartContext start() throws RecognitionException {
		StartContext _localctx = new StartContext(_ctx, getState());
		enterRule(_localctx, 0, RULE_start);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(8);
			expr();
			setState(9);
			match(EOF);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ExprContext extends ParserRuleContext {
		public DefineContext define() {
			return getRuleContext(DefineContext.class,0);
		}
		public ContentContext content() {
			return getRuleContext(ContentContext.class,0);
		}
		public ExprContext expr() {
			return getRuleContext(ExprContext.class,0);
		}
		public TerminalNode WS() { return getToken(TempIdentifyParser.WS, 0); }
		public TerminalNode EOF() { return getToken(TempIdentifyParser.EOF, 0); }
		public ExprContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_expr; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof TempIdentifyListener ) ((TempIdentifyListener)listener).enterExpr(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof TempIdentifyListener ) ((TempIdentifyListener)listener).exitExpr(this);
		}
	}

	public final ExprContext expr() throws RecognitionException {
		ExprContext _localctx = new ExprContext(_ctx, getState());
		enterRule(_localctx, 2, RULE_expr);
		int _la;
		try {
			setState(29);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case T__0:
				enterOuterAlt(_localctx, 1);
				{
				setState(11);
				match(T__0);
				setState(13); 
				_errHandler.sync(this);
				_la = _input.LA(1);
				do {
					{
					{
					setState(12);
					match(T__1);
					}
					}
					setState(15); 
					_errHandler.sync(this);
					_la = _input.LA(1);
				} while ( _la==T__1 );
				setState(17);
				define();
				setState(19); 
				_errHandler.sync(this);
				_la = _input.LA(1);
				do {
					{
					{
					setState(18);
					match(T__1);
					}
					}
					setState(21); 
					_errHandler.sync(this);
					_la = _input.LA(1);
				} while ( _la==T__1 );
				setState(23);
				match(T__2);
				setState(24);
				content();
				setState(25);
				expr();
				}
				break;
			case WS:
				enterOuterAlt(_localctx, 2);
				{
				setState(27);
				match(WS);
				}
				break;
			case EOF:
				enterOuterAlt(_localctx, 3);
				{
				setState(28);
				match(EOF);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class DefineContext extends ParserRuleContext {
		public List<TerminalNode> ID() { return getTokens(TempIdentifyParser.ID); }
		public TerminalNode ID(int i) {
			return getToken(TempIdentifyParser.ID, i);
		}
		public DefineContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_define; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof TempIdentifyListener ) ((TempIdentifyListener)listener).enterDefine(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof TempIdentifyListener ) ((TempIdentifyListener)listener).exitDefine(this);
		}
	}

	public final DefineContext define() throws RecognitionException {
		DefineContext _localctx = new DefineContext(_ctx, getState());
		enterRule(_localctx, 4, RULE_define);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(32); 
			_errHandler.sync(this);
			_la = _input.LA(1);
			do {
				{
				{
				setState(31);
				match(ID);
				}
				}
				setState(34); 
				_errHandler.sync(this);
				_la = _input.LA(1);
			} while ( _la==ID );
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	@SuppressWarnings("CheckReturnValue")
	public static class ContentContext extends ParserRuleContext {
		public List<TerminalNode> CHINESE() { return getTokens(TempIdentifyParser.CHINESE); }
		public TerminalNode CHINESE(int i) {
			return getToken(TempIdentifyParser.CHINESE, i);
		}
		public ContentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_content; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof TempIdentifyListener ) ((TempIdentifyListener)listener).enterContent(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof TempIdentifyListener ) ((TempIdentifyListener)listener).exitContent(this);
		}
	}

	public final ContentContext content() throws RecognitionException {
		ContentContext _localctx = new ContentContext(_ctx, getState());
		enterRule(_localctx, 6, RULE_content);
		int _la;
		try {
			int _alt;
			setState(72);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(39);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,4,_ctx);
				while ( _alt!=1 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1+1 ) {
						{
						{
						setState(36);
						matchWildcard();
						}
						} 
					}
					setState(41);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,4,_ctx);
				}
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(42);
				match(T__1);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(44); 
				_errHandler.sync(this);
				_la = _input.LA(1);
				do {
					{
					{
					setState(43);
					match(CHINESE);
					}
					}
					setState(46); 
					_errHandler.sync(this);
					_la = _input.LA(1);
				} while ( _la==CHINESE );
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(48);
				match(T__3);
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(49);
				match(T__4);
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(50);
				match(T__5);
				}
				break;
			case 7:
				enterOuterAlt(_localctx, 7);
				{
				setState(51);
				match(T__6);
				}
				break;
			case 8:
				enterOuterAlt(_localctx, 8);
				{
				setState(52);
				match(T__7);
				}
				break;
			case 9:
				enterOuterAlt(_localctx, 9);
				{
				setState(53);
				match(T__8);
				}
				break;
			case 10:
				enterOuterAlt(_localctx, 10);
				{
				setState(54);
				match(T__9);
				}
				break;
			case 11:
				enterOuterAlt(_localctx, 11);
				{
				setState(55);
				match(T__10);
				}
				break;
			case 12:
				enterOuterAlt(_localctx, 12);
				{
				setState(56);
				match(T__11);
				}
				break;
			case 13:
				enterOuterAlt(_localctx, 13);
				{
				setState(57);
				match(T__12);
				}
				break;
			case 14:
				enterOuterAlt(_localctx, 14);
				{
				setState(58);
				match(T__13);
				}
				break;
			case 15:
				enterOuterAlt(_localctx, 15);
				{
				setState(59);
				match(T__14);
				}
				break;
			case 16:
				enterOuterAlt(_localctx, 16);
				{
				setState(60);
				match(T__15);
				}
				break;
			case 17:
				enterOuterAlt(_localctx, 17);
				{
				setState(61);
				match(T__16);
				}
				break;
			case 18:
				enterOuterAlt(_localctx, 18);
				{
				setState(62);
				match(T__17);
				}
				break;
			case 19:
				enterOuterAlt(_localctx, 19);
				{
				setState(63);
				match(T__18);
				}
				break;
			case 20:
				enterOuterAlt(_localctx, 20);
				{
				setState(64);
				match(T__19);
				}
				break;
			case 21:
				enterOuterAlt(_localctx, 21);
				{
				setState(65);
				match(T__20);
				}
				break;
			case 22:
				enterOuterAlt(_localctx, 22);
				{
				setState(66);
				match(T__21);
				}
				break;
			case 23:
				enterOuterAlt(_localctx, 23);
				{
				setState(67);
				match(T__22);
				}
				break;
			case 24:
				enterOuterAlt(_localctx, 24);
				{
				setState(68);
				match(T__23);
				}
				break;
			case 25:
				enterOuterAlt(_localctx, 25);
				{
				setState(69);
				match(T__24);
				}
				break;
			case 26:
				enterOuterAlt(_localctx, 26);
				{
				setState(70);
				match(T__25);
				}
				break;
			case 27:
				enterOuterAlt(_localctx, 27);
				{
				setState(71);
				match(T__26);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static final String _serializedATN =
		"\u0004\u0001\u001eK\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+
		"\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0001\u0000\u0001\u0000\u0001"+
		"\u0000\u0001\u0001\u0001\u0001\u0004\u0001\u000e\b\u0001\u000b\u0001\f"+
		"\u0001\u000f\u0001\u0001\u0001\u0001\u0004\u0001\u0014\b\u0001\u000b\u0001"+
		"\f\u0001\u0015\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
		"\u0001\u0001\u0003\u0001\u001e\b\u0001\u0001\u0002\u0004\u0002!\b\u0002"+
		"\u000b\u0002\f\u0002\"\u0001\u0003\u0005\u0003&\b\u0003\n\u0003\f\u0003"+
		")\t\u0003\u0001\u0003\u0001\u0003\u0004\u0003-\b\u0003\u000b\u0003\f\u0003"+
		".\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+
		"\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+
		"\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+
		"\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+
		"\u0003\u0003I\b\u0003\u0001\u0003\u0001\'\u0000\u0004\u0000\u0002\u0004"+
		"\u0006\u0000\u0000g\u0000\b\u0001\u0000\u0000\u0000\u0002\u001d\u0001"+
		"\u0000\u0000\u0000\u0004 \u0001\u0000\u0000\u0000\u0006H\u0001\u0000\u0000"+
		"\u0000\b\t\u0003\u0002\u0001\u0000\t\n\u0005\u0000\u0000\u0001\n\u0001"+
		"\u0001\u0000\u0000\u0000\u000b\r\u0005\u0001\u0000\u0000\f\u000e\u0005"+
		"\u0002\u0000\u0000\r\f\u0001\u0000\u0000\u0000\u000e\u000f\u0001\u0000"+
		"\u0000\u0000\u000f\r\u0001\u0000\u0000\u0000\u000f\u0010\u0001\u0000\u0000"+
		"\u0000\u0010\u0011\u0001\u0000\u0000\u0000\u0011\u0013\u0003\u0004\u0002"+
		"\u0000\u0012\u0014\u0005\u0002\u0000\u0000\u0013\u0012\u0001\u0000\u0000"+
		"\u0000\u0014\u0015\u0001\u0000\u0000\u0000\u0015\u0013\u0001\u0000\u0000"+
		"\u0000\u0015\u0016\u0001\u0000\u0000\u0000\u0016\u0017\u0001\u0000\u0000"+
		"\u0000\u0017\u0018\u0005\u0003\u0000\u0000\u0018\u0019\u0003\u0006\u0003"+
		"\u0000\u0019\u001a\u0003\u0002\u0001\u0000\u001a\u001e\u0001\u0000\u0000"+
		"\u0000\u001b\u001e\u0005\u001e\u0000\u0000\u001c\u001e\u0005\u0000\u0000"+
		"\u0001\u001d\u000b\u0001\u0000\u0000\u0000\u001d\u001b\u0001\u0000\u0000"+
		"\u0000\u001d\u001c\u0001\u0000\u0000\u0000\u001e\u0003\u0001\u0000\u0000"+
		"\u0000\u001f!\u0005\u001d\u0000\u0000 \u001f\u0001\u0000\u0000\u0000!"+
		"\"\u0001\u0000\u0000\u0000\" \u0001\u0000\u0000\u0000\"#\u0001\u0000\u0000"+
		"\u0000#\u0005\u0001\u0000\u0000\u0000$&\t\u0000\u0000\u0000%$\u0001\u0000"+
		"\u0000\u0000&)\u0001\u0000\u0000\u0000\'(\u0001\u0000\u0000\u0000\'%\u0001"+
		"\u0000\u0000\u0000(I\u0001\u0000\u0000\u0000)\'\u0001\u0000\u0000\u0000"+
		"*I\u0005\u0002\u0000\u0000+-\u0005\u001c\u0000\u0000,+\u0001\u0000\u0000"+
		"\u0000-.\u0001\u0000\u0000\u0000.,\u0001\u0000\u0000\u0000./\u0001\u0000"+
		"\u0000\u0000/I\u0001\u0000\u0000\u00000I\u0005\u0004\u0000\u00001I\u0005"+
		"\u0005\u0000\u00002I\u0005\u0006\u0000\u00003I\u0005\u0007\u0000\u0000"+
		"4I\u0005\b\u0000\u00005I\u0005\t\u0000\u00006I\u0005\n\u0000\u00007I\u0005"+
		"\u000b\u0000\u00008I\u0005\f\u0000\u00009I\u0005\r\u0000\u0000:I\u0005"+
		"\u000e\u0000\u0000;I\u0005\u000f\u0000\u0000<I\u0005\u0010\u0000\u0000"+
		"=I\u0005\u0011\u0000\u0000>I\u0005\u0012\u0000\u0000?I\u0005\u0013\u0000"+
		"\u0000@I\u0005\u0014\u0000\u0000AI\u0005\u0015\u0000\u0000BI\u0005\u0016"+
		"\u0000\u0000CI\u0005\u0017\u0000\u0000DI\u0005\u0018\u0000\u0000EI\u0005"+
		"\u0019\u0000\u0000FI\u0005\u001a\u0000\u0000GI\u0005\u001b\u0000\u0000"+
		"H\'\u0001\u0000\u0000\u0000H*\u0001\u0000\u0000\u0000H,\u0001\u0000\u0000"+
		"\u0000H0\u0001\u0000\u0000\u0000H1\u0001\u0000\u0000\u0000H2\u0001\u0000"+
		"\u0000\u0000H3\u0001\u0000\u0000\u0000H4\u0001\u0000\u0000\u0000H5\u0001"+
		"\u0000\u0000\u0000H6\u0001\u0000\u0000\u0000H7\u0001\u0000\u0000\u0000"+
		"H8\u0001\u0000\u0000\u0000H9\u0001\u0000\u0000\u0000H:\u0001\u0000\u0000"+
		"\u0000H;\u0001\u0000\u0000\u0000H<\u0001\u0000\u0000\u0000H=\u0001\u0000"+
		"\u0000\u0000H>\u0001\u0000\u0000\u0000H?\u0001\u0000\u0000\u0000H@\u0001"+
		"\u0000\u0000\u0000HA\u0001\u0000\u0000\u0000HB\u0001\u0000\u0000\u0000"+
		"HC\u0001\u0000\u0000\u0000HD\u0001\u0000\u0000\u0000HE\u0001\u0000\u0000"+
		"\u0000HF\u0001\u0000\u0000\u0000HG\u0001\u0000\u0000\u0000I\u0007\u0001"+
		"\u0000\u0000\u0000\u0007\u000f\u0015\u001d\"\'.H";
	public static final ATN _ATN =
		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
	static {
		_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
		for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
			_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
		}
	}
}